

// 创建一个 axios 实例
const axiosInstance = axios.create({
    baseURL: 'http://114.116.238.46:1234',
    timeout: 2000,
    headers: {
        'Content-Type': 'application/json'
    }
})

// 添加请求拦截器
axiosInstance.interceptors.request.use(config => {
    // 添加 token
    const token = localStorage.getItem('token')
    if (config.url.includes('/llm/analyze')) {
        config.timeout = 20000;
    }

    if (token) {
        config.headers.Authorization = token
    }

    return config
}, error => {
    // 错误处理
    switch (error.code) {
        case 'ERR_NETWORK':
            console.error('网络错误，请检查网络连接或服务器状态');
            break
        case 'ECONNABORTED':
            console.error('请求超时，请检查网络连接或服务器状态');
            break
        case 'ERR_REQUEST_ABORTED':
            console.error('请求被取消');
            break
        case 'ERR_BAD_REQUEST':
            console.error('请求参数错误');
            break
        default:
            console.error('请求拦截器错误', error)
            break
    }

    return Promise.reject(error)
})

// 添加响应拦截器
axiosInstance.interceptors.response.use(response => {
    // 更新 token
    const token = response.headers.authorization
    if (token) {
        localStorage.setItem('token', token)
    }

    // 响应成功时更新最新使用时间
    localStorage.setItem('lastActiveTime', new Date().getTime())

    if (response.data.code !== 0) {
        alert(response.data.message ? response.data.message : '未知错误')
    }

    return response
}, error => {
    console.error('响应拦截器错误', error)
    console.dir(error)

    // 错误处理
    if (error.response) { // 服务器响应
        // 请求已发送，服务器返回了错误状态码（4xx 或 5xx）
        // token 过期
        if (error.response.status === 401) {
            alert('登录已过期, 请重新登录');
            localStorage.removeItem('lastActiveTime');
            localStorage.removeItem('token');
            window.location.href = './login.html';
            return;
        }
    }
    if (error.code) { // 服务器未响应
        switch (error.code) {
            case 'ERR_NETWORK':
                alert('网络错误，请检查网络连接或服务器状态');
                break
            case 'ECONNABORTED':
                alert('请求超时，请检查网络连接或服务器状态');
                break
            case 'ERR_REQUEST_ABORTED':
                alert('请求被取消');
                break
            case 'ERR_BAD_REQUEST':
                alert('请求参数错误');
                break
            default:
                alert('请求拦截器错误', error)
                break
        }
        return;
    } if (error.request) {
        // 请求已发送，但未收到响应（网络错误）
        // 未连接网络
        if (error.message === 'Network Error') {
            alert('请检查网络连接');
        }
        else {
            alert("服务器未响应")
        }

        return;
    }

    // 其他错误（如配置错误）
    console.log('错误:', error);
    alert('发生未知错误');
    return;
})
